﻿using System;
using System.Collections.Generic;
using System.Text;
using BaseDeDatos;
using BaseDeDatos.Exceptions;
using Protocolo.Exception;

namespace Protocolo
{
    public class Verificador
    {
        /// <summary>
        /// Esta funcion devuelve la persona a la que se esta logeando verificando
        /// en la base de datos y encriptando la contraseña
        /// </summary>
        /// <param name="Usuario">
        /// String en donde se encuentra el nombre de usuario que introdujo el  usuario
        /// </param>
        /// <param name="Pass">
        /// String en donde se encuentra la contraseña que introdujo el  usuario
        /// </param>
        /// <returns></returns>
        public static Persona logeo(String Usuario, String Pass)
        {
            Persona Person = null;
            try
            {
                object temp = BaseDeDatos.BD.Login("Persona", Usuario, "Login");

                Person = Fabrica_persona.crear(temp);

                if (Person == null)
                {
                    return null;
                }
                else
                {
                    String epass = Desencriptar.Encrypt(Pass, "Password");
                    if (epass.Equals(Person.Password))
                    {
                        return Person;
                    }
                    else
                    {
                        return null;
                    }


                }
            }
            catch(NoExisteException nee)
            {
                return null;
            }
            catch (BDException ae)  //alguno de los argumentos es incorrectos
            {
                throw (new BDException("Los argumentos en la consulta son incorrectos", ae));
            }
            catch (ConexionFallidaException ade)  //Error de conexion (hay que buscar)
            {
                throw (new ConexionFallidaException("Ocurrio un error en la base de datos", ade));
            }
            catch (System.Exception ex)
            {
                return null;
            }

            return Person;
        }


        /// <summary>
        /// Funcion para verificar si el nombre de usuario ya existe
        /// </summary>
        /// <param name="per">objeto de la persona nueva en el sistema</param>
        /// <returns>true si no existe y false si existe</returns>
        public static bool nu_logger(object per)
        {
            try
            {
                Persona person = null;
                person = Fabrica_persona.crear(per);
                person.Password = Encriptar.Encrypt(person.Password,"Password");
                BD.SavePerson(person);
                return true;
            }
            catch( ConexionFallidaException cfe )
            {
                return false;
            }
            catch (UsuarioNoInsertadoException unie)
            {
                return false;
            }
            catch ( BDException bde )
            {
                return false;
            }
            catch( Exception e )
            {
                return false;
            }
            
        }

    }
}
